home *** CD-ROM | disk | FTP | other *** search
- # Copyright 1999-2005 Gentoo Foundation
- # Distributed under the terms of the GNU General Public License v2
- # $Id: bashcomp.eselect 216 2005-10-17 13:24:33Z ka0ttic $
-
- DESCRIPTION="Manage contributed bash-completion scripts"
- MAINTAINER="ka0ttic@gentoo.org"
- SVN_DATE='$Date: 2005-10-17 14:24:33 +0100 (Mon, 17 Oct 2005) $'
- VERSION=$(svn_date_to_version "${SVN_DATE}")
-
- find_targets() {
- local targets bc x i=0
- bcdirs[i]="${ROOT}/usr/share/bash-completion/*"
-
- if [[ -n "${ES_BASHCOMP_DIRS}" ]] ; then
- for x in ${ES_BASHCOMP_DIRS} ; do
- bcdirs[$((++i))]="${x}/*"
- done
- fi
-
- for bc in ${bcdirs[@]} ; do
- [[ -e ${bc} && ${bc} != *~ ]] && targets="${targets}\n$(basename ${bc})"
- done
-
- echo -ne ${targets} | sort -u
- }
-
- is_enabled() {
- local bcdir="${ROOT}/${HOME}/.bash_completion.d"
-
- if [[ ${1} == "--global" ]] ; then
- bcdir="${ROOT}/etc/bash_completion.d"
- shift
- fi
-
- [[ -e ${bcdir}/${1} ]] || return 1
- return 0
- }
-
- ### list action ###
-
- describe_list() {
- echo "List available completions"
- }
-
- describe_list_options() {
- echo "--global : List globally enabled completions"
- }
-
- do_list() {
- local opts
- targets=( $(find_targets) )
- write_list_start "Available completions:"
-
- if [[ ${1} == "--global" ]] ; then
- opts="--global"
- shift
- fi
-
- if [[ -n "${targets[@]}" ]] ; then
- for (( n = 0 ; n < ${#targets[@]} ; ++n )) ; do
- is_enabled ${opts:-} ${targets[${n}]} && \
- targets[${n}]="${targets[${n}]} $(highlight '*')"
- done
- write_numbered_list "${targets[@]}"
- else
- write_kv_list_entry "(none found)" ""
- fi
-
- return 0
- }
-
- ### enable action ###
-
- describe_enable() {
- echo "Enable specified completion(s)"
- }
-
- describe_enable_parameters() {
- echo "<target>"
- }
-
- describe_enable_options() {
- echo "<target> : Target name or number (from 'list' action)"
- echo "--global : Enable for all users"
- }
-
- do_enable() {
- local bc bcdir="${ROOT}/${HOME}/.bash_completion.d"
-
- if [[ ${1} == "--global" ]] ; then
- bcdir="${ROOT}/etc/bash_completion.d"
- shift
- fi
-
- [[ -z ${1} ]] && die -q "You didn't specify any completions to enable."
-
- # create directory if necessary
- if [[ ! -d ${bcdir} && -w $(dirname ${bcdir}) ]] ; then
- mkdir ${bcdir} || die -q "Failed to create ${bcdir}"
- elif [[ ! -d ${bcdir} ]] ; then
- die -q "You don't have permission to create ${bcdir}"
- fi
-
- # make sure we have proper permissions
- [[ -w ${bcdir} ]] || \
- die -q "You don't have permission to write to ${bcdir}"
-
- targets=( $(find_targets) )
-
- for bc in $@ ; do
- local file target=${bc}
-
- is_number "${target}" && \
- target=${targets[$(( ${target} - 1 ))]}
-
- [[ -z "${target}" ]] && \
- die -q "Target \"${bc}\" doesn't appear to be valid!"
-
- bc=${target}
-
- # ignore any unrecognized options
- [[ ${bc} == --* ]] && continue
-
- # what form is the argument in?
- case "${bc}" in
- # absolute path
- /*)
- file="${ROOT}/${bc}"
- ;;
- # relative path
- */*)
- file="${ROOT}/${PWD}/${bc}"
- ;;
- # no path
- *)
- # CWD
- if [[ -f ${bc} ]] ; then
- file="${ROOT}/${PWD}/${bc}"
- # assume /usr/share/bash-completion
- elif [[ -f ${ROOT}/usr/share/bash-completion/${bc} ]]
- then
- file="${ROOT}/usr/share/bash-completion/${bc}"
- else
- if [[ -n "${ES_BASHCOMP_DIRS}" ]] ; then
- for x in ${ES_BASHCOMP_DIRS} ; do
- [[ -f ${x}/${bc} ]] && file="${x}/${bc}"
- done
- fi
-
- [[ -e ${file} ]] || \
- file="${ROOT}/usr/share/bash-completion/${bc}"
- fi
- ;;
- esac
-
- # does it exist?
- if [[ ! -e ${file} ]] ; then
- write_error_msg "${file} doesn't exist"
- continue
- fi
-
- # already installed?
- if [[ -e ${bcdir}/$(basename ${bc}) ]] ; then
- write_error_msg "$(basename ${bc}) is already installed"
- continue
- fi
-
- # finally, create the symlink
- ln -s "${file}" "${bcdir}" || \
- die -q "Failed to create symlink from '${file}' to '${bcdir}'"
- done
- }
-
- ### disable action ###
-
- describe_disable() {
- echo "Disable specified completion(s)"
- }
-
- describe_disable_parameters() {
- echo "<target>"
- }
-
- describe_disable_options() {
- echo "<target> : Target name or number (from 'list' action)"
- echo "--global : Disable for all users"
- }
-
-
- do_disable() {
- local bc bcdir="${ROOT}/${HOME}/.bash_completion.d"
-
- if [[ ${1} == "--global" ]] ; then
- bcdir="${ROOT}/etc/bash_completion.d"
- shift
- fi
-
- [[ -z ${1} ]] && die -q "You didn't specify any completions to disable"
-
- targets=( $(find_targets) )
-
- for bc in $@ ; do
- local file target=${bc}
-
- is_number "${target}" && \
- target=${targets[$(( ${target} - 1 ))]}
-
- [[ -z "${target}" ]] && \
- die -q "Target \"${bc}\" doesn't appear to be valid!"
-
- bc=${target}
- file="${bcdir}/${bc}"
-
- # ignore any unrecognized options
- [[ ${bc} == --* ]] && continue
-
- # is in installed?
- if [[ ! -e ${file} ]] ; then
- write_error_msg "${bc} is not installed"
- continue
- fi
-
- # remove it if we have permissions
- if [[ -w $(dirname ${file}) ]] ; then
- rm "${file}" || die -q "Failed to remove ${file}"
- else
- die -q "You don't have permission to remove ${file}"
- fi
- done
- }
-
- # vim: set ft=eselect :
-